package net.xdclass.online_xdclass.exception;

import net.xdclass.online_xdclass.utils.JsonData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class CustomExceptionHandler {
//    打印日志
    private final static Logger logger = LoggerFactory.getLogger(CustomExceptionHandler.class);
//    处理异常 返回的是json格式给前端
    @ExceptionHandler
    @ResponseBody
    public JsonData handel(Exception e){
//需要用到对象的强制类型转换时，需要使用instanceof进行判断。
/*        instanceof是Java的一个保留关键字，左边是对象，右边是类，返回类型是Boolean类型。
它的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象，是，则返回true，否则返回false。
 */
        System.out.println(e);
        logger.error("[ 系统异常 ]{}",e);
        if( e instanceof XDException ){
            XDException xdException = (XDException) e;
            return JsonData.buildError(xdException.getCode(),xdException.getMsg());
        }else {
            return JsonData.buildError("全局异常，未知错误");
        }
    }

}
